home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / webxp040.lzh / Source / compress.s next >
Text File  |  1998-09-27  |  9KB  |  540 lines

  1. *    âCâüü[âW1/2ê│Åk
  2.  
  3.     .xdef    _CompressImageHS
  4.     .xdef    _CompressImageHQ
  5.     .xdef    _CompressImage256HS
  6.     .xdef    _CompressImage256HQ
  7.     .xdef    _NonCompressImage256
  8.  
  9.     .text
  10.     .even
  11.  
  12. _CompressImageHS:    * 65536 ÉFé╫é╜âCâüü[âW 1/2 ê│Åkâïü[â`âôüiìéæ¼üEÆßëµÄ┐ö┼üj
  13.     link    a6,#0
  14.     movem.l    d1-d7/a0-a5,-(sp)
  15.  
  16.     movea.l    8(a6),a1    * a1.l = ô]æùɵ
  17.     movea.l    12(a6),a0    * a0.l = ô]æùî│
  18.  
  19.  
  20.     move.l    20(a6),d7    * d7.w = y
  21.     lsr.w    d7
  22.     subq.w    #1,d7        * d7.w = y âïü[âvë±Éö
  23.     bcs    CompressImageHS_y1dot
  24.  
  25.     move.l    16(a6),d0    * d0.w = x
  26.     move.w    d0,d1
  27.     add.w    d1,d1
  28.     movea.w    d1,a5
  29.     btst.l    #0,d0
  30.     beq    @f
  31.     addq.w    #2,a5
  32. @@:            * a5.w = Äƒé╠ y é╔ìsé¡Ä₧ a0.l é╔æ½é╖Æl
  33.  
  34.     move.w    d0,d6
  35.     lsr.w    d6
  36.     subq.w    #1,d6
  37.     bcs    CompressImageHS_x1dot
  38.     move.w    d6,a4        * a4.w = x âïü[âvë±Éö
  39.  
  40. 1:
  41.     move.w    a4,d6
  42. 2:
  43.     move.w    (a0)+,(a1)+
  44.     addq.w    #2,a0
  45.     dbra    d6,2b
  46.  
  47.     adda.w    a5,a0
  48.     dbra    d7,1b
  49.  
  50. CompressImageHS_rts:
  51.     movem.l    (sp)+,d1-d7/a0-a5
  52.     unlk    a6
  53.     rts
  54.  
  55.  
  56. CompressImageHS_y1dot:    * y é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  57.     move.l    16(a6),d0    * d0.w = x
  58.  
  59.     move.w    d0,d6
  60.     lsr.w    d6
  61.     subq.w    #1,d6
  62.     bcs    CompressImageHS_xy1dot
  63. 2:
  64.     move.w    (a0)+,(a1)+
  65.     addq.w    #2,a0
  66.     dbra    d6,2b
  67.  
  68.     bra    CompressImageHS_rts
  69.  
  70.  
  71. CompressImageHS_x1dot:    * x é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  72.     move.w    d0,a5
  73.     adda.w    a5,a5
  74.  
  75. 1:    move.w    (a0),(a1)+
  76.     adda.w    a5,a0
  77.     dbra    d7,1b
  78.  
  79.     bra    CompressImageHS_rts
  80.  
  81.  
  82. CompressImageHS_xy1dot:    * x ïyé╤ y é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  83.     move.w    (a0),(a1)+
  84.  
  85.     bra    CompressImageHS_rts
  86.  
  87.  
  88. ****************************************************************
  89. _CompressImageHQ:    * 65536 ÉFé╫é╜âCâüü[âW 1/2 ê│Åkâïü[â`âôüiÆßæ¼üEìéëµÄ┐ö┼üj
  90.     link    a6,#0
  91.     movem.l    d1-d7/a0-a5,-(sp)
  92.  
  93.     movea.l    8(a6),a1    * a1.l = ô]æùɵ
  94.     movea.l    12(a6),a0    * a0.l = ô]æùî│
  95.  
  96.     move.l    20(a6),d7    * d7.w = y
  97.     lsr.w    d7
  98.     subq.w    #1,d7        * d7.w = y âïü[âvë±Éö
  99.     bcs    CompressImageHQ_y1dot
  100.  
  101.     move.l    16(a6),d0    * d0.w = x
  102.     move.w    d0,d1
  103.     add.w    d1,d1
  104.     movea.w    d1,a5
  105.     btst.l    #0,d0
  106.     beq    @f
  107.     addq.w    #2,a5
  108. @@:            * a5.w = Äƒé╠ y é╔ìsé¡Ä₧ a0.l é╔æ½é╖Æl
  109.  
  110.     move.w    d0,d6
  111.     lsr.w    d6
  112.     subq.w    #1,d6
  113.     bcs    CompressImageHQ_x1dot
  114.     move.w    d6,a4        * a4.w = x âïü[âvë±Éö
  115.  
  116.     move.w    d0,d4
  117.     add.w    d4,d4
  118.     move.w    d4,a3        * a3.w = x*2
  119.  
  120.     move.w    #%1111100000111110,d4    * d4.w = ÆΦÉö
  121.     move.w    #%0000011111000000,d5
  122.  
  123. 1:
  124.     move.w    a4,d6
  125. 2:
  126.     move.w    (a0),d0
  127.     move.w    d0,d1
  128. *    andi.w    #%1111100000111110,d0
  129.     and.w    d4,d0
  130. *    andi.w    #%0000011111000000,d1
  131.     and.w    d5,d1
  132.     lsr.w    d0
  133.     lsr.w    d1
  134.     move.w    2(a0),d2
  135.     move.w    d2,d3
  136. *    andi.w    #%1111100000111110,d2
  137.     and.w    d4,d2
  138. *    andi.w    #%0000011111000000,d3
  139.     and.w    d5,d3
  140.     lsr.w    d2
  141.     lsr.w    d3
  142.     add.w    d2,d0
  143.     add.w    d3,d1
  144. *    andi.w    #%1111100000111110,d0
  145.     and.w    d4,d0
  146. *    andi.w    #%0000011111000000,d1
  147.     and.w    d5,d1
  148.     swap.w    d0    * ÅπéQâhâbâgé╠ò╜ï╧îïë╩é≡
  149.     swap.w    d1    * êΩÄ₧ôIé╔æ▐ö≡
  150.  
  151.     move.w    (a3.w,a0),d0
  152.     move.w    d0,d1
  153. *    andi.w    #%1111100000111110,d0
  154.     and.w    d4,d0
  155. *    andi.w    #%0000011111000000,d1
  156.     and.w    d5,d1
  157.     lsr.w    d0
  158.     lsr.w    d1
  159.     move.w    2(a3.w,a0),d2
  160.     move.w    d2,d3
  161. *    andi.w    #%1111100000111110,d2
  162.     and.w    d4,d2
  163. *    andi.w    #%0000011111000000,d3
  164.     and.w    d5,d3
  165.     lsr.w    d2
  166.     lsr.w    d3
  167.     add.w    d0,d2
  168.     add.w    d1,d3
  169. *    andi.w    #%1111100000111110,d2
  170.     and.w    d4,d2
  171. *    andi.w    #%0000011111000000,d3
  172.     and.w    d5,d3
  173.     swap.w    d0
  174.     swap.w    d1
  175.  
  176.     lsr.w    d0
  177.     lsr.w    d1
  178.     lsr.w    d2
  179.     lsr.w    d3
  180.     add.w    d2,d0
  181.     add.w    d3,d1
  182. *    andi.w    #%1111100000111110,d0
  183.     and.w    d4,d0
  184. *    andi.w    #%0000011111000000,d1
  185.     and.w    d5,d1
  186.     or.w    d1,d0
  187.     move.w    d0,(a1)+
  188.     addq.w    #4,a0
  189.  
  190.  
  191. .if    0
  192.     * x ò√îⁿé╠é▌ò╜ï╧é≡ĵéΘ
  193.     move.w    (a0),d0
  194.     move.w    d0,d1
  195.     andi.w    #%1111100000111110,d0
  196.     andi.w    #%0000011111000000,d1
  197.     lsr.w    d0
  198.     lsr.w    d1
  199.     move.w    2(a0),d2
  200.     move.w    d2,d3
  201.     andi.w    #%1111100000111110,d2
  202.     andi.w    #%0000011111000000,d3
  203.     lsr.w    d2
  204.     lsr.w    d3
  205.     add.w    d2,d0
  206.     add.w    d3,d1
  207.     andi.w    #%1111100000111110,d0
  208.     andi.w    #%0000011111000000,d1
  209.     or.w    d1,d0
  210.     move.w    d0,(a1)+
  211.     addq.w    #4,a0
  212. .endif
  213.     dbra    d6,2b
  214.  
  215.     adda.w    a5,a0
  216.     dbra    d7,1b
  217.  
  218. CompressImageHQ_rts:
  219.     movem.l    (sp)+,d1-d7/a0-a5
  220.     unlk    a6
  221.     rts
  222.  
  223.  
  224.  
  225. CompressImageHQ_y1dot:    * y é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  226.     move.l    16(a6),d0    * d0.w = x
  227.  
  228.     move.w    d0,d6
  229.     lsr.w    d6
  230.     subq.w    #1,d6
  231.     bcs    CompressImageHQ_xy1dot
  232. 2:
  233.     move.w    (a0)+,(a1)+
  234.     addq.w    #2,a0
  235.     dbra    d6,2b
  236.  
  237.     bra    CompressImageHQ_rts
  238.  
  239.  
  240. CompressImageHQ_x1dot:    * x é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  241.     move.w    d0,a5
  242.     adda.w    a5,a5
  243.  
  244. 1:    move.w    (a0),(a1)+
  245.     adda.w    a5,a0
  246.     dbra    d7,1b
  247.  
  248.     bra    CompressImageHQ_rts
  249.  
  250.  
  251. CompressImageHQ_xy1dot:    * x ïyé╤ y é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  252.     move.w    (a0),(a1)+
  253.  
  254.     bra    CompressImageHQ_rts
  255.  
  256.  
  257. ****************************************************************
  258. _CompressImage256HS:    * 256 ÉF->65536 ÉFò╧è╖òté½
  259.             * é╫é╜âCâüü[âW 1/2 ê│Åkâïü[â`âôüiìéæ¼üEÆßëµÄ┐ö┼üj
  260.     link    a6,#0
  261.     movem.l    d1-d7/a0-a5,-(sp)
  262.  
  263.     movea.l    8(a6),a1    * a1.l = ô]æùɵ
  264.     movea.l    12(a6),a0    * a0.l = ô]æùî│
  265.     movea.l    16(a6),a2    * a2.l = âpâîâbâgâoâbâtâ@
  266.  
  267.     move.l    24(a6),d7    * d7.w = y
  268.     lsr.w    d7
  269.     subq.w    #1,d7        * d7.w = y âïü[âvë±Éö
  270.     bcs    CompressImage256HS_y1dot
  271.  
  272.     move.l    20(a6),d0    * d0.w = x
  273.     move.w    d0,a5
  274.     btst.l    #0,d0
  275.     beq    @f
  276.     addq.w    #1,a5
  277. @@:            * a5.w = Äƒé╠ y é╔ìsé¡Ä₧ a0.l é╔æ½é╖Æl
  278.  
  279.     move.w    d0,d6
  280.     lsr.w    d6
  281.     subq.w    #1,d6
  282.     bcs    CompressImage256HS_x1dot
  283.     move.w    d6,a4        * a4.w = x âïü[âvë±Éö
  284.  
  285.     move.w    d0,a3        * a3.w = x
  286.  
  287. 1:
  288.     move.w    a4,d6
  289. 2:
  290.     moveq.l    #0,d0
  291.     move.b    (a0),d0
  292.     add.w    d0,d0
  293.     move.w    (d0.w,a2),(a1)+
  294.     addq.w    #2,a0
  295.  
  296.     dbra    d6,2b
  297.  
  298.     adda.w    a5,a0
  299.     dbra    d7,1b
  300.  
  301. CompressImage256HS_rts:
  302.     movem.l    (sp)+,d1-d7/a0-a5
  303.     unlk    a6
  304.     rts
  305.  
  306.  
  307. CompressImage256HS_y1dot:    * y é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  308.     move.l    20(a6),d0    * d0.w = x
  309.  
  310.     move.w    d0,d6
  311.     lsr.w    d6
  312.     subq.w    #1,d6
  313.     bcs    CompressImage256HS_xy1dot
  314. 2:
  315.     moveq.l    #0,d0
  316.     move.b    (a0),d0
  317.     add.w    d0,d0
  318.     move.w    (d0.w,a2),(a1)+
  319.     addq.w    #2,a0
  320.     dbra    d6,2b
  321.  
  322.     bra    CompressImage256HS_rts
  323.  
  324.  
  325. CompressImage256HS_x1dot:    * x é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  326.     move.w    d0,a5
  327.     adda.w    a5,a5
  328. 1:
  329.     moveq.l    #0,d0
  330.     move.b    (a0),d0
  331.     add.w    d0,d0
  332.     move.w    (d0.w,a2),(a1)+
  333.  
  334.     adda.w    a5,a0
  335.     dbra    d7,1b
  336.     bra    CompressImage256HS_rts
  337.  
  338. CompressImage256HS_xy1dot:    * x ïyé╤ y é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  339.     moveq.l    #0,d0
  340.     move.b    (a0),d0
  341.     add.w    d0,d0
  342.     move.w    (d0.w,a2),(a1)+
  343.  
  344.     bra    CompressImage256HS_rts
  345.  
  346.  
  347. ****************************************************************
  348. _CompressImage256HQ:    * 256 ÉF->65536 ÉFò╧è╖òté½
  349.             * é╫é╜âCâüü[âW 1/2 ê│Åkâïü[â`âôüiÆßæ¼üEìéëµÄ┐ö┼üj
  350.     link    a6,#0
  351.     movem.l    d1-d7/a0-a5,-(sp)
  352.  
  353.     movea.l    8(a6),a1    * a1.l = ô]æùɵ
  354.     movea.l    12(a6),a0    * a0.l = ô]æùî│
  355.     movea.l    16(a6),a2    * a2.l = âpâîâbâgâoâbâtâ@
  356.  
  357.     move.l    24(a6),d7    * d7.w = y
  358.     lsr.w    d7
  359.     subq.w    #1,d7        * d7.w = y âïü[âvë±Éö
  360.     bcs    CompressImage256HQ_y1dot
  361.  
  362.     move.l    20(a6),d0    * d0.w = x
  363.     move.w    d0,a5
  364.     btst.l    #0,d0
  365.     beq    @f
  366.     addq.w    #1,a5
  367. @@:            * a5.w = Äƒé╠ y é╔ìsé¡Ä₧ a0.l é╔æ½é╖Æl
  368.  
  369.     move.w    d0,d6
  370.     lsr.w    d6
  371.     subq.w    #1,d6
  372.     bcs    CompressImage256HQ_x1dot
  373.     move.w    d6,a4        * a4.w = x âïü[âvë±Éö
  374.  
  375.     move.w    d0,a3        * a3.w = x
  376.  
  377.     move.w    #%1111100000111110,d4    * d4.w = ÆΦÉö
  378.     move.w    #%0000011111000000,d5    * d4.w = ÆΦÉö
  379.  
  380. 1:
  381.     move.w    a4,d6
  382. 2:
  383.     clr.w    d0
  384.     move.b    (a0),d0
  385.     add.w    d0,d0
  386.     move.w    (d0.w,a2),d0
  387.     move.w    d0,d1
  388. *    andi.w    #%1111100000111110,d0
  389.     and.w    d4,d0
  390. *    andi.w    #%0000011111000000,d1
  391.     and.w    d5,d1
  392.     lsr.w    d0
  393.     lsr.w    d1
  394.     clr.w    d2
  395.     move.b    1(a0),d2
  396.     add.w    d2,d2
  397.     move.w    (d2.w,a2),d2
  398.     move.w    d2,d3
  399. *    andi.w    #%1111100000111110,d2
  400.     and.w    d4,d2
  401. *    andi.w    #%0000011111000000,d3
  402.     and.w    d5,d3
  403.     lsr.w    d2
  404.     lsr.w    d3
  405.     add.w    d2,d0
  406.     add.w    d3,d1
  407. *    andi.w    #%1111100000111110,d0
  408.     and.w    d4,d0
  409. *    andi.w    #%0000011111000000,d1
  410.     and.w    d5,d1
  411.     swap.w    d0    * ÅπéQâhâbâgé╠ò╜ï╧îïë╩é≡
  412.     swap.w    d1    * êΩÄ₧ôIé╔æ▐ö≡
  413.  
  414.     clr.w    d0
  415.     move.b    (a3.w,a0),d0
  416.     add.w    d0,d0
  417.     move.w    (d0.w,a2),d0
  418.     move.w    d0,d1
  419. *    andi.w    #%1111100000111110,d0
  420.     and.w    d4,d0
  421. *    andi.w    #%0000011111000000,d1
  422.     and.w    d5,d1
  423.     lsr.w    d0
  424.     lsr.w    d1
  425.     clr.w    d2
  426.     move.b    1(a3.w,a0),d2
  427.     add.w    d2,d2
  428.     move.w    (d2.w,a2),d2
  429.     move.w    d2,d3
  430. *    andi.w    #%1111100000111110,d2
  431.     and.w    d4,d2
  432. *    andi.w    #%0000011111000000,d3
  433.     and.w    d5,d3
  434.     lsr.w    d2
  435.     lsr.w    d3
  436.     add.w    d0,d2
  437.     add.w    d1,d3
  438. *    andi.w    #%1111100000111110,d2
  439.     and.w    d4,d2
  440. *    andi.w    #%0000011111000000,d3
  441.     and.w    d5,d3
  442.     swap.w    d0
  443.     swap.w    d1
  444.  
  445.     lsr.w    d0
  446.     lsr.w    d1
  447.     lsr.w    d2
  448.     lsr.w    d3
  449.     add.w    d2,d0
  450.     add.w    d3,d1
  451. *    andi.w    #%1111100000111110,d0
  452.     and.w    d4,d0
  453. *    andi.w    #%0000011111000000,d1
  454.     and.w    d5,d1
  455.     or.w    d1,d0
  456.     move.w    d0,(a1)+
  457.     addq.w    #2,a0
  458.  
  459.     dbra    d6,2b
  460.  
  461.     adda.w    a5,a0
  462.     dbra    d7,1b
  463.  
  464. CompressImage256HQ_rts:
  465.     movem.l    (sp)+,d1-d7/a0-a5
  466.     unlk    a6
  467.     rts
  468.  
  469.  
  470. CompressImage256HQ_y1dot:    * y é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  471.     move.l    20(a6),d0    * d0.w = x
  472.  
  473.     move.w    d0,d6
  474.     lsr.w    d6
  475.     subq.w    #1,d6
  476.     bcs    CompressImage256HQ_xy1dot
  477. 2:
  478.     moveq.l    #0,d0
  479.     move.b    (a0),d0
  480.     add.w    d0,d0
  481.     move.w    (d0.w,a2),(a1)+
  482.     addq.w    #2,a0
  483.     dbra    d6,2b
  484.  
  485.     bra    CompressImage256HQ_rts
  486.  
  487.  
  488. CompressImage256HQ_x1dot:    * x é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  489.     move.w    d0,a5
  490.     adda.w    a5,a5
  491. 1:
  492.     moveq.l    #0,d0
  493.     move.b    (a0),d0
  494.     add.w    d0,d0
  495.     move.w    (d0.w,a2),(a1)+
  496.  
  497.     adda.w    a5,a0
  498.     dbra    d7,1b
  499.     bra    CompressImage256HQ_rts
  500.  
  501. CompressImage256HQ_xy1dot:    * x ïyé╤ y é¬ê│ÅkîπéPâhâbâgé╔é╚éΘÅΩìç
  502.     moveq.l    #0,d0
  503.     move.b    (a0),d0
  504.     add.w    d0,d0
  505.     move.w    (d0.w,a2),(a1)+
  506.  
  507.     bra    CompressImage256HQ_rts
  508.  
  509.  
  510. ****************************************************************
  511. _NonCompressImage256:    * 256 ÉF->65536 ÉFò╧è╖üEê│Åké╚é╡
  512.     link    a6,#0
  513.     movem.l    d1-d7/a0-a5,-(sp)
  514.  
  515.     movea.l    8(a6),a1    * a1.l = ô]æùɵ
  516.     movea.l    12(a6),a0    * a0.l = ô]æùî│
  517.     movea.l    16(a6),a2    * a2.l = âpâîâbâgâoâbâtâ@
  518.  
  519.     move.l    24(a6),d7    * d7.w = y
  520.     subq.w    #1,d7        * d7.w = y âïü[âvë±Éö
  521.  
  522.     move.l    20(a6),a4    * a4.w = x
  523.     subq.w    #1,a4
  524. 1:
  525.     move.w    a4,d6
  526. 2:
  527.     moveq.l    #0,d0
  528.     move.b    (a0)+,d0
  529.     add.w    d0,d0
  530.     move.w    (d0.w,a2),(a1)+
  531.  
  532.     dbra    d6,2b
  533.     dbra    d7,1b
  534.  
  535.     movem.l    (sp)+,d1-d7/a0-a5
  536.     unlk    a6
  537.     rts
  538.  
  539.  
  540.